package com.alibaba.otter.node.etl.load.loader.mq.rabbit;

import com.alibaba.otter.node.etl.load.loader.mq.rabbit.callback.ConnectedCallback;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.callback.ConsumeFailureCallback;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.callback.DisconnectedCallback;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.callback.SuccessCallback;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.consume.AdvancedHandler;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.consume.Handler;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.consume.HeaderHandler;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.consume.PropertyHandler;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.provider.ConsumerTagProvider;
import com.alibaba.otter.node.etl.load.loader.mq.rabbit.strategy.FailureAction;
import org.apache.commons.lang3.ArrayUtils;

import java.util.Arrays;
//
//public class ListenerBuilder {
//
//    private RabbitMqListener listener;
//
//    public ListenerBuilder(String namespaceName) {
//        listener = new RabbitMqListener(namespaceName);
//    }
//
//    public ListenerBuilder onQueue(String queueName) {
//        listener.setQueue(queueName);
//        return this;
//    }
//
//    public ListenerBuilder handler(Handler<?> handler) {
//        listener.setHandler(handler);
//        return this;
//    }
//
//    public ListenerBuilder handler(AdvancedHandler handler) {
//        listener.setHandler(handler);
//        return this;
//    }
//
//    @Deprecated
//    public ListenerBuilder onFailure(ConsumeFailureCallback... callbacks) {
//        if (ArrayUtils.isNotEmpty(callbacks)) {
//            listener.addFailureCallbacks(Arrays.asList(callbacks));
//        }
//        return this;
//    }
//
//    public ListenerBuilder onFailure(FailureAction failureStrategy) {
//        listener.setFailureAction(failureStrategy);
//        return this;
//    }
//
//    public ListenerBuilder onSuccess(SuccessCallback... callbacks) {
//        if (ArrayUtils.isNotEmpty(callbacks)) {
//            listener.addSuccessCallbacks(Arrays.asList(callbacks));
//        }
//        return this;
//    }
//
//    public ListenerBuilder onConnected(ConnectedCallback callback) {
//        listener.setConnectedCallback(callback);
//        return this;
//    }
//
//    public ListenerBuilder onDisconnected(DisconnectedCallback callback) {
//        listener.setDisconnectedCallback(callback);
//        return this;
//    }
//
//    public ListenerBuilder handleHeader(HeaderHandler... headerHandlers) {
//        if (headerHandlers != null) {
//            listener.addHeaderHandler(Arrays.asList(headerHandlers));
//        }
//        return this;
//    }
//
//    public ListenerBuilder handleProperty(PropertyHandler... propertyHandlers) {
//        if (propertyHandlers != null) {
//            listener.addPropertyHandler(Arrays.asList(propertyHandlers));
//        }
//        return this;
//    }
//
//    public ListenerBuilder provideConsumerTag(ConsumerTagProvider provider) {
//        if (provider != null) {
//            listener.setConsumerTagProvider(provider);
//        }
//        return this;
//    }
//
//    /**
//     * 如果需要保证消息的消费顺序，请确保消费者唯一，且prefetchCount设置为1 如果设置的值过大（大于3000），且客户端处理时间过长（超过30秒），则可能导致服务器主动关闭连接。从而引起消息重复消费。
//     *
//     * @param prefetchCount 从rabbitmq预取得消息数量，默认为1000，不能小于1，不能大于2000。
//     */
//    public ListenerBuilder prefetch(int prefetchCount) {
//        prefetchCount = prefetchCount < 1 ? 1 : prefetchCount;
//        prefetchCount = prefetchCount > MqConstants.MAX_PREFETCH_SIZE ? MqConstants.MAX_PREFETCH_SIZE : prefetchCount;
//        listener.setPrefetchCount(prefetchCount);
//        return this;
//    }
//
//    /**
//     * 消费消息的线程数量
//     */
//    public ListenerBuilder threads(int threadCount) {
//        listener.setThreadCnt(threadCount);
//        return this;
//    }
//
//    public Listener build() {
//        return listener;
//    }
//}
